from flask import request

from app.libs.enums import ClientTypeEnum
from app.libs.error_code import ClientTypeError, Success
from app.libs.redprint import Redprint
from app.models.user import User
from app.validators.forms import ClientForm, UserEmailForm

api = Redprint('client')


@api.route('/register', methods=['POST'])
def create_client():
    # 注册:形式很多
    # json 的方式请求过来的
    # 表单
    # 1 / 0
    # from werkzeug.exceptions import BadRequest
    # raise BadRequest()
    form = ClientForm().validate_for_api()  # 链式调用
    # 数据合法
    promise = {
        ClientTypeEnum.USER_EMAIL: __register_by_email,
        ClientTypeEnum.USER_MOBILE: __register_by_mobile
    }
    promise[form.type.data]()

    # 异常分类  预知的异常 和 未知异常  APIException
    # AOP 的思想
    # 迷宫一样的 不要关心迷宫怎么走 堵住出口就可以了

    # 我们可以接受定义的复杂，但是不能接受调用的复杂
    return Success()


def __register_by_email():
    form = UserEmailForm().validate_for_api()
    User.register_by_email(
        form.nickname.data,
        form.account.data,
        form.secret.data
    )


def __register_by_mobile():
    pass
